One technology that supports messaging and queuing across a network is referred to as MQSeries and is offered by International Business Machines Corporation. With MQSeries, users can dramatically reduce application development time by using MQSeries API functions. Since MQSeries supports many platforms, MQSeries applications can be ported easily from one platform to another. In a network, two MQSeries systems communicate with each other via channels, such as MQSeries channels. An MQSeries sender channel defines a connection from one MQSeries system to another MQSeries system and transmits messages from the one system to the other system.
Applications send messages to each other without providing complicated logic to handle error cases when messages are lost and without worrying about the communication method used to deliver the messages. In MQSeries, an application can declare a message as persistent and rely on MQSeries to deliver the message without worrying about losing it. The MQSeries solutions on the various platforms utilize some form of a file system to store the messages before they are successfully delivered to the destination MQSystem and acknowledged by the destination MQSystem. Using a file system to store messages, however, requires disk I/O operations, which are very expensive in terms of process cycles, and thus, very slow in terms of performance.
Another overhead associated with the file queue is related to the locking of the queue. When one application is performing a transaction that is to access the queue to either retrieve a message or add a message, the file queue is locked the entire transaction scope to prevent other processes from accessing the queue. This further decreases the queue performance, and makes it unusable by a high-performance application.
Some platforms today have improved the performance of the queue by using asynchronous file I/O operations, in addition to logging and checkpointing when updating the file queue. With this type of I/O operation, I/Os proceed without waiting their completion. This reduces the I/O time, and thus, increases file queue access. While the asynchronous I/O logging and checkpointing have increased file queue performance, the increase is not enough to satisfy high-performance applications that require the handling of thousands of persistent messages per second. Further, the I/O operations have not addressed the problem of minimizing locking overhead.
Thus, a need still exists for a high-performance queue. In particular, a need exists for a queue that is able to handle thousands of persistent messages per second. Further, a need exists for a queue in which locking is minimized.